package c18类加载和反射;

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Iterator;

public class s00各种类加载器信息 {

	public static void main(String[] args) throws IOException {
		//获取系统类加载器--实际上就是 APPClassLoader
		ClassLoader syscl = ClassLoader.getSystemClassLoader();
		System.err.println("系统类加载器：" + syscl);
		System.err.println("系统类加载器的加载路径：");
		/*
		 * 获取系统类加载器的加载路径——通常由 CLASSPATH 环境变量指定
		 * 如果操作系统没有指定 CLASSPATH 环境变量，默认以当前路径作为
		 * 系统类加载器的加载路径
		 */
		Enumeration<URL> sysurls = syscl.getResources("");
		while (sysurls.hasMoreElements()) {
			System.err.println(sysurls.nextElement());
		}

		System.err.println(System.getProperty("java.class.path"));

		//获取系统类加载器的父类加载器：得到扩展类加载器--因为无法通过ClassLoader直接获取扩展类加载器
		ClassLoader extcl = syscl.getParent();
		System.err.println("扩展类加载器：" + extcl);
		System.err.println("扩展类加载器的加载路径：" + System.getProperty("java.ext.dirs"));

		//获取扩展类加载器的父类加载器——根类加载器，发现是null，因为此加载器是用 c++ 写的
		System.err.println("扩展类加载器的parent：" + extcl.getParent());
	}

}
